/*
 * 描          述:  <描述>
 * 修  改   人:  PengQingyang
 * 修改时间:  2022年5月17日
 * <修改描述:>
 */
package com.tx.component.sendsms.plugin.aliyun;

/**
 * 阿里云发送短信接口返回的resposeCode枚举<br/>
 * <功能详细描述>
 * 
 * @author  PengQingyang
 * @version  [版本号, 2022年5月17日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public enum AliyunSendSMSResponseCodeEnum {
    
    OK("OK", "OK", "", ""),
    
    ISV_SMS_SIGNATURE_SCENE_ILLEGAL("isv.SMS_SIGNATURE_SCENE_ILLEGAL",
            "签名和模板类型不一致", "模板和签名类型不一致，例如用验证码签名下发了通知短信或短信推广。 ",
            "签名分为验证码和通用两种类型。模板分为验证码、短信通知和推广短信三种类型，其中验证码类签名只能发送验证码模板，通用类签名可以发送全部类型的模板。建议您把签名更改为“通用”类型。"),
    
    ISV_EXTEND_CODE_ERROR("isv.EXTEND_CODE_ERROR", "扩展码使用错误，相同的扩展码不可用于多个签名",
            "发送短信时，不同签名的短信使用了相同扩展码。 ", "在调用短信发送接口时，不同的短信签名使用不同的扩展码。"),
    
    ISV_DOMESTIC_NUMBER_NOT_SUPPORTED("isv.DOMESTIC_NUMBER_NOT_SUPPORTED",
            "国际/港澳台消息模板不支持发送境内号码", "国际/港澳台消息模板仅支持发送国际、中国港澳台地区的号码。 ",
            "如果想发送中国内地（大陆）短信，请申请国内消息短信模板。"),
    
    ISV_DENY_IP_RANGE("isv.DENY_IP_RANGE", "源IP地址所在的地区被禁用",
            "被系统检测到源IP属于非中国内地（大陆）地区。 ",
            "请将源IP地址修改为中国内地（大陆）地区的IP地址。国际/港澳台的IP地址禁止发送中国内地短信业务。"),
    
    ISV_DAY_LIMIT_CONTROL("isv.DAY_LIMIT_CONTROL", "触发日发送限额",
            "已经达到您在控制台设置的短信日发送量限额值。 ",
            "如需修改限额，请登录短信服务控制台，在左侧导航栏，选择系统设置 > 国内消息设置 > 安全设置，修改发送总量阈值。"),
    
    ISV_SMS_CONTENT_ILLEGAL("isv.SMS_CONTENT_ILLEGAL", "短信内容包含禁止发送内容",
            "短信内容包含禁止发送内容。 ", "修改短信文案。"),
    
    ISV_SMS_SIGN_ILLEGAL("isv.SMS_SIGN_ILLEGAL", "签名禁止使用", "签名禁止使用。 ",
            "请在短信服务控制台申请符合规定的签名。"),
    
    ISP_RAM_PERMISSION_DENY("isp.RAM_PERMISSION_DENY", "RAM权限不足", "RAM权限不足。 ",
            "请为当前使用的AccessKey对应RAM用户进行授权：AliyunDysmsFullAccess（管理权限）。具体操作请参见：为RAM用户授权。"),
    
    ISV_OUT_OF_SERVICE("isv.OUT_OF_SERVICE", "业务停机",
            "余额不足。余额不足时，套餐包中即使有短信额度也无法发送短信。 ",
            "请及时充值。 说明 如果余额大于零仍报此错误，请提交工单联系售后工程师处理。"),
    
    ISV_PRODUCT_UN_SUBSCRIPT("isv.PRODUCT_UN_SUBSCRIPT", "未开通云通信产品的阿里云客户",
            "该AccessKey所属的账号尚未开通云通信的服务，包括短信、语音、流量等服务。 ",
            "当出现此类报错信息时，需要检查当前AccessKey是否已经开通阿里云短信服务。如已开通短信服务，则参照短信服务文档调用接口。"),
    
    ISV_PRODUCT_UNSUBSCRIBE("isv.PRODUCT_UNSUBSCRIBE", "产品未开通",
            "该AccessKey所属的账号尚未开通当前接口的产品，例如仅开通了短信服务的用户调用语音服务接口时会产生此报错信息。 ",
            "检查AccessKey对应账号是否已开通调用对应接口的服务。开通短信服务，请参见短信服务产品介绍。"),
    
    ISV_ACCOUNT_NOT_EXISTS("isv.ACCOUNT_NOT_EXISTS", "账户不存在",
            "使用了错误的账户名称或AccessKey。 ", "请确认账号信息。"),
    
    ISV_ACCOUNT_ABNORMAL("isv.ACCOUNT_ABNORMAL", "账户异常", "账户异常。 ",
            "计费服务查询异常，请提交工单联系人工服务。"),
    
    ISV_SMS_TEMPLATE_ILLEGAL("isv.SMS_TEMPLATE_ILLEGAL", "该账号下找不到对应模板",
            "在您的账号下找不到对应模板，可能AccessKey账号和模板归属于不同账号，或使用了未审核通过的模板。 ",
            "请检查您的AccessKey账号和模板是否属于同一个账号，或登录短信服务控制台，在模板管理页面查此模板是否审核通过。"),
    
    ISV_SMS_SIGNATURE_ILLEGAL("isv.SMS_SIGNATURE_ILLEGAL", "该账号下找不到对应签名",
            " 在您的账号下找不到对应编号的签名，可能是AccessKey账号和签名归属于不同账号，或使用了未审核通过的签名。 您传入的签名有空格、问号、错别字等导致乱码。 ",
            " 请检查您的AccessKey和签名是否属于同一个账号，或登录短信服务控制台，在签名管理页面查看此签名是否审核通过。 请检查您传入的签名格式是否正确，删除签名中的空格、特殊符号，修改错别字。签名格式请参见短信签名规范。"),
    
    ISV_INVALID_PARAMETERS("isv.INVALID_PARAMETERS", "参数格式不正确", "参数格式不正确。 ",
            "请根据对应的API文档检查参数格式。例如，短信查询QuerySendDetails接口的参数SendDate日期格式为yyyyMMdd，正确格式为20170101，错误格式为2017-01-01。"),
    
    ISP_SYSTEM_ERROR("isp.SYSTEM_ERROR", "系统出现错误，请重新调用", "系统出现错误。 ",
            "请重新调用接口，如仍存在此情况，请提交工单联系人工服务。"),
    
    ISV_MOBILE_NUMBER_ILLEGAL("isv.MOBILE_NUMBER_ILLEGAL", "手机号码格式错误",
            "手机号码格式错误。 ",
            "参数PhoneNumbers请传入正确的格式。 国内消息：+/+86/0086/86或无任何前缀的11位手机号码，例如1595195****。 国际/港澳台消息：国际区号+号码，例如8520000****。"),
    
    ISV_MOBILE_COUNT_OVER_LIMIT("isv.MOBILE_COUNT_OVER_LIMIT",
            "手机号码数量超过限制，最多支持1000条", "参数PhoneNumbers中指定的手机号码数量超出限制。 ",
            "请将手机号码数量限制在1000个以内。"),
    
    ISV_TEMPLATE_MISSING_PARAMETERS("isv.TEMPLATE_MISSING_PARAMETERS",
            "模板变量中存在未赋值变量", "参数TemplateParam中，变量未全部赋值。 ",
            "请用JSON格式字符串为模板变量赋值。例如，模板为您好${name}，验证码${code}，则参数TemplateParam可以指定为{\"name\":\"Tom\",\"code\":\"123\"}。"),
    
    ISV_BUSINESS_LIMIT_CONTROL("isv.BUSINESS_LIMIT_CONTROL", "触发云通信流控限制",
            "达到云通信短信发送频率上限。 ",
            "请将短信发送频率限制在正常的业务流控范围内，默认流控详情，请参见短信发送规则。您还可以登录短信服务控制台，在系统设置 > 国内消息设置页面调整流控阈值。"),
    
    ISV_INVALID_JSON_PARAM("isv.INVALID_JSON_PARAM", "参数格式错误，请修改为字符串值",
            "参数格式错误，不是合法的JSON格式，修改为字符串值。 ",
            "请在参数TemplateParam中指定正确的JSON格式字符串，例如{\"code\":\"123\"}。"),
    
    ISV_BLACK_KEY_CONTROL_LIMIT("isv.BLACK_KEY_CONTROL_LIMIT", "变量中传入疑似违规信息",
            "黑名单管控是指变量内容含有限制发送的内容，例如变量中不允许透传URL。 ", "请检查通过变量是否透传了一些敏感信息。"),
    
    ISV_PARAM_LENGTH_LIMIT("isv.PARAM_LENGTH_LIMIT", "参数超过长度限制", "参数超过长度限制。 ",
            "针对2018年01月10日之后申请的短信通知类模板，变量限制为1~35个字符；验证码类模板，变量限制为1～20个字符，请修改参数长度。"),
    
    ISV_PARAM_NOT_SUPPORT_URL("isv.PARAM_NOT_SUPPORT_URL", "变量不支持传入URL",
            "黑名单管控是指变量内容含有限制发送的内容，例如变量中不允许透传URL。 ", "请检查通过变量是否透传了URL或敏感信息。"),
    
    ISV_AMOUNT_NOT_ENOUGH("isv.AMOUNT_NOT_ENOUGH", "账户余额不足", "当前账户余额不足。 ",
            "请及时充值。调用接口前请确认当前账户余额是否足以支付预计发送的短信量。"),
    
    ISV_TEMPLATE_PARAMS_ILLEGAL("isv.TEMPLATE_PARAMS_ILLEGAL",
            "模板变量里包含非法字符，如emoji表情等", "模板变量里包含非法字符，如emoji表情等。 ",
            "请检查通过变量是否透传了emoji表情。"),
    
    SignatureDoesNotMatch("SignatureDoesNotMatch", "客户端生成的签名与服务端不匹配",
            "签名（Signature）加密错误。 ",
            " 如果使用SDK调用接口，请注意AccessKey ID和AccessKey Secret字符串赋值正确。 如果自行加密签名（Signature），请参见请求签名检查加密逻辑。"),
    
    INVALIDTIMESTAMP_EXPIRED("InvalidTimeStamp.Expired", "时间戳或日期已过期",
            "一般由于时区差异造成时间戳错误，发出请求的时间和服务器接收到请求的时间不在15分钟内。 ",
            "请使用GMT时间。 说明 阿里云网关使用的时间是GMT时间。"),
    
    SignatureNonceUsed("SignatureNonceUsed", "签名随机数已被使用",
            "唯一随机数重复，SignatureNonce为唯一随机数，用于防止网络重放攻击。 ", "不同请求请使用不同的随机数值。"),
    
    InvalidVersion("InvalidVersion", "API版本号错误", "版本号（Version）错误。 ",
            "请确认接口的版本号，短信服务的API版本号（Version）为2017-05-25。"),
    
    INVALIDACTION_NOTFOUND("InvalidAction.NotFound", "未找到指定的API，请检查您的URL和方法",
            "参数Action中指定的接口名错误。 ", "请在参数Action中使用正确的接口地址和接口名。"),
    
    ISV_SIGN_COUNT_OVER_LIMIT("isv.SIGN_COUNT_OVER_LIMIT", "超过单自然日签名申请数量上限",
            "一个自然日中申请签名数量超过限制。 ", "合理安排每天的签名申请数量，次日重新申请。"),
    
    ISV_TEMPLATE_COUNT_OVER_LIMIT("isv.TEMPLATE_COUNT_OVER_LIMIT",
            "超过单自然日模板申请数量上限", "一个自然日中申请模板数量超过限制。 ", "合理安排每天的模板申请数量，次日重新申请。"),
    
    ISV_SIGN_NAME_ILLEGAL("isv.SIGN_NAME_ILLEGAL", "签名名称不符合规范", "签名名称不符合规范。 ",
            "签名名称规范，请参见短信签名规范重新申请签名。"),
    
    ISV_SIGN_FILE_LIMIT("isv.SIGN_FILE_LIMIT", "签名认证材料附件大小超过限制",
            "签名认证材料附件大小超过限制。 ", "压缩签名认证材料至2MB以下。"),
    
    ISV_SIGN_OVER_LIMIT("isv.SIGN_OVER_LIMIT", "签名字符数量超过限制",
            "签名的名称或申请说明的字数超过限制。 ", "修改签名名称或申请说明，并重新提交审核。"),
    
    ISV_TEMPLATE_OVER_LIMIT("isv.TEMPLATE_OVER_LIMIT", "模板字符数量超过限制",
            "模板的名称、内容或申请说明的字数超过限制。 ", "修改模板的名称、内容或申请说明，并重新提交审核。"),
    
    SIGNATURE_BLACKLIST("SIGNATURE_BLACKLIST", "签名内容涉及违规信息", "签名内容涉及违规信息。 ",
            "重新修改签名内容。更多信息，请参见短信签名规范。"),
    
    ISV_SHORTURL_OVER_LIMIT("isv.SHORTURL_OVER_LIMIT", "超过单自然日短链申请数量上限",
            "一天创建短链数量超过限制。 ", "合理预估一天申请短链数量，次日重新创建短链。"),
    
    ISV_NO_AVAILABLE_SHORT_URL("isv.NO_AVAILABLE_SHORT_URL", "该账号无有效短链",
            "企业客户当前并无有效短链。 ", "企业客户需重新申请有效短链，保证在短链有效期内调用短参生成接口。"),
    
    ISV_SHORTURL_NAME_ILLEGAL("isv.SHORTURL_NAME_ILLEGAL", "短链名不能超过24个字符",
            "短链名不能超过24个字符。 ", "请根据短链规范重新创建。"),
    
    ISV_SOURCEURL_OVER_LIMIT("isv.SOURCEURL_OVER_LIMIT", "原始链接字符数量超过限制",
            "原始链接字符数量超过限制。 ", "重新创建判断字符长度是否符合平台规则。"),
    
    ISV_SHORTURL_TIME_ILLEGAL("isv.SHORTURL_TIME_ILLEGAL", "短链有效期期限超过限制",
            "选择短链有效期限超过30天限制。 ", "请保证短链有效期输入在30天以内。"),
    
    ISV_PHONENUMBERS_OVER_LIMIT("isv.PHONENUMBERS_OVER_LIMIT", "上传手机号个数超过上限",
            "单次调用上传手机号个数超过50000个上限。 ", "分多次调用短参生成接口，单次上传手机号个数不超过50000个。"),
    
    ISV_SHORTURL_STILL_AVAILABLE("isv.SHORTURL_STILL_AVAILABLE",
            "原始链接生成的短链仍在有效期内", "原始链接生成的短链仍在有效期内，无需重复创建。 ",
            " 待原始链接生成的短链失效或删除该短链后，重新创建。 使用新的原始链接，创建新的短链。"),
    
    ISV_ERROR_EMPTY_FILE("isv.ERROR_EMPTY_FILE", "签名文件为空", "签名文件为空。 ",
            "检查签名文件，补充签名资质证明、授权书等相关文件截图。"),
    
    ISP_GATEWAY_ERROR("isp.GATEWAY_ERROR", "调用发送应用模块失败", "调用发送应用模块失败。 ",
            "调用发送应用模块失败，请尝试重新发送，或提交工单联系人工服务处理。"),
    
    ISV_ERROR_SIGN_NOT_DELETE("isv.ERROR_SIGN_NOT_DELETE", "审核中的签名，暂时无法删除",
            "签名正在审核中，暂时无法删除。 ", "请签名审核结束后，再删除对应签名。"),
    
    ISV_ERROR_SIGN_NOT_MODIFY("isv.ERROR_SIGN_NOT_MODIFY", "已通过的签名不支持修改",
            "已通过的签名不支持修改。 ", "请按签名规范，重新提交申请签名。更多信息，请参见短信签名规范。"),
    
    ISV_ERROR_TEMPLATE_NOT_DELETE("isv.ERROR_TEMPLATE_NOT_DELETE",
            "审核中的模板，暂时无法删除", "模板正在审核中，暂时无法删除。 ", "请模板审核结束后，再删除对应模板。"),
    
    ISV_ERROR_TEMPLATE_NOT_MODIFY("isv.ERROR_TEMPLATE_NOT_MODIFY",
            "已通过的模板不支持修改", "已通过的模板不支持修改。 ", "请按模板规范，重新提交申请模板。更多信息，请参见短信模板规范。"),
    
    ISV_SMS_OVER_LIMIT("isv.SMS_OVER_LIMIT", "单日最多申请模板或签名100条",
            "您已超过单日最多申请模板或签名100条的上限。 ", "请您24小时后继续申请，或提交工单联系人工服务协助解决。"),
    
    ISV_CUSTOMER_REFUSED("isv.CUSTOMER_REFUSED", "用户已退订推广短信", "该手机用户已退订推广短信。 ",
            "请尊重手机用户意愿，减少对该客户的推广短信发送。"),
    
    ISV_SMS_TEST_SIGN_TEMPLATE_LIMIT("isv.SMS_TEST_SIGN_TEMPLATE_LIMIT",
            "测试模板和签名限制", "测试专用签名和模板必须结合使用。 ", "请使用短信服务提供的测试专用签名和测试专用模板。");
    
    /** 编码 */
    private final String code;
    
    /** 消息|错误消息 */
    private final String message;
    
    /** 错误原因 */
    private final String reason;
    
    /** 错误解决方案 */
    private final String solution;
    
    /** <默认构造函数> */
    private AliyunSendSMSResponseCodeEnum(String code, String message,
            String reason, String solution) {
        this.code = code;
        this.message = message;
        this.reason = reason;
        this.solution = solution;
    }
    
    /**
     * @return 返回 code
     */
    public String getCode() {
        return code;
    }
    
    /**
     * @return 返回 message
     */
    public String getMessage() {
        return message;
    }
    
    /**
     * @return 返回 reason
     */
    public String getReason() {
        return reason;
    }
    
    /**
     * @return 返回 solution
     */
    public String getSolution() {
        return solution;
    }
}
